package com.library.common.utils.uuid;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * @ClassName: UniqueIdGeneratorUtils
 * @Description: 唯一id生成器utils
 * @Author: hb
 * @Date: 2024/8/29
 */

public class UniqueIdGeneratorUtils {
    // 用于生成随机字母数字组合的字符集
    private static final String CHAR_SET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    private static final int RANDOM_LENGTH = 4;

    /**
     * 生成唯一编号，格式为：当前时间戳（yyyyMMddHHmmss）+ 随机4位字母数字组合
     * @return 唯一编号
     */
    public static String generateUniqueId() {
        // 获取当前时间戳
        String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());

        // 生成随机4位字母数字组合
        String randomStr = generateRandomString(RANDOM_LENGTH);

        // 组合并返回
        return timeStamp + randomStr;
    }

    /**
     * 生成唯一编号，格式为：当前时间戳（yyyyMMdd）+ 随机4位字母数字组合
     * @return 唯一编号
     */
    public static String generateSimpleUniqueId(String prefix) {
        // 获取当前时间戳
        String timeStamp = new SimpleDateFormat("yyyyMMdd").format(new Date());

        // 生成随机4位字母数字组合
        String randomStr = generateRandomString(RANDOM_LENGTH);

        // 组合并返回
        return prefix + timeStamp + randomStr;
    }

    /**
     * 生成指定长度的随机字母数字组合
     * @param length 生成字符串的长度
     * @return 随机字母数字组合
     */
    public static String generateRandomString(int length) {
        StringBuilder builder = new StringBuilder(length);
        Random random = new Random();

        for (int i = 0; i < length; i++) {
            builder.append(CHAR_SET.charAt(random.nextInt(CHAR_SET.length())));
        }

        return builder.toString();
    }

    public static void main(String[] args) {
        // 测试生成唯一编号
        String uniqueId = generateUniqueId();
        System.out.println("Generated Unique ID: " + uniqueId);
    }
}
